﻿#include<stdio.h>
#include <malloc.h>

#define EQ(a,b) ((a)==(b))
#define LT(a,b)  ((a)<(b))
#define LQ(a,b)  ((a)>(b))
#define LH +1     //左高
#define EH 0      //等高
#define RH -1     //右高
#define NULL 0


/////////////////////////////　定义结构体　///////////////////////////　
typedef struct BSTNode
{
    int data;
	int time;
    int bf;                        //结点的平衡因子
    struct BSTNode *lchild,*rchild;//左、右孩子指针
}BSTNode,*BSTree;


///////////////////////////　　函数声明　　///////////////////////////
void R_Rotate(BSTree &p);    //对以*p为根的二叉排序树作右旋处理
void L_Rotate(BSTree &p);    //对以*p为根的二叉排序树作左旋处理
void LeftBalance(BSTree &T); //对以指针Ｔ所指结点为根的二叉树作左平衡旋转处理
void RightBalance(BSTree &T);//对以指针Ｔ所指结点为根的二叉树作右平衡旋转处理
bool InsertAVL(BSTree &T,int e,bool &taller);//插入结点e
bool InsertAVL1(BSTree &T,int e,bool &taller);
bool SearchBST(BSTree &T,int key);//查找元素key是否在树Ｔ中
void PrintBST(BSTree T,int m);//按树状打印输出二叉树的元素
void CreatBST(BSTree &T);    //创建平衡二叉树,(注意:以输入-1为二叉树建立的结束)
void LeftBalance_div(BSTree &p,int &shorter);//删除结点时左平衡旋转处理
void RightBalance_div(BSTree &p,int &shorter);//删除结点时右平衡旋转处理
void Delete(BSTree q,BSTree  &r,int &shorter);//删除结点
int DeleteAVL(BSTree &p,int x,int &shorter);//平衡二叉树的删除操作
/////////////////////////////////////////////////////////////////////
